package util.http;

import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Http 프로토콜을 사용하는 서버와 Post 방식으로 연결하는 클래스
 * @author  : BoxResin
 * @version : 1.0
 */
public class HttpPostConnector extends HttpConnector
{
	/**
	 * 서버의 주소를 전달받는 생성자
	 * @param address : 서버의 주소 (예: http://www.naver.com/)
	 */
	public HttpPostConnector(String address)
	{
		super(address);
	}

	/**
	 * 서버에 매개변수를 전달하고 결과를 반환하는 메서드
	 * @param params : 서버에 전달할 매개변수
	 * @return       : 서버의 응답 (주로 HTML 문서)
	 * @throws java.io.IOException
	 */
	@Override
	public String request(String... params) throws IOException
	{
		// 매개변수가 올바른지 검사한다.
		_checkRequestParams(params);

		// 매개변수를 리스트형태로 만들고
		List<NameValuePair> paramList = new ArrayList<NameValuePair>(params.length / 2);
		for (int i = 0; i < params.length; i += 2)
			paramList.add(new BasicNameValuePair(params[i], params[i + 1]));
		UrlEncodedFormEntity paramEntity = new UrlEncodedFormEntity(paramList, HTTP.UTF_8);

		// 서버에 전달한다.
		HttpPost post = new HttpPost(getAddress());
		post.setEntity(paramEntity);
		return _request(post);
	}
}